import os
import sys
from app import app
from database import db
from models import User, Issue, Tag, Milestone, Comment, File, IssueHistory
from werkzeug.security import generate_password_hash

# 路径设置
base_dir = os.path.abspath(os.path.dirname(__file__))
db_path = os.path.join(base_dir, 'issues.db')

# 直接删除数据库，不询问确认
if os.path.exists(db_path):
    try:
        os.remove(db_path)
        print("旧数据库已删除。")
    except Exception as e:
        print(f"删除数据库文件时出错: {e}")
        sys.exit(1)
else:
    print("数据库文件不存在，将创建新数据库。")

# 创建新的数据库表结构
with app.app_context():
    try:
        # 创建所有表
        db.create_all()
        print("数据库表结构已创建。")
        
        # 创建管理员用户
        admin = User(
            username='admin',
            email='admin@example.com',
            password=generate_password_hash('password'),
            is_admin=True
        )
        db.session.add(admin)
        db.session.commit()
        print("管理员用户已创建: 用户名=admin, 密码=password")
        
        # 创建一些测试用户
        users = []
        for i in range(1, 4):
            user = User(
                username=f'user{i}',
                email=f'user{i}@example.com',
                password=generate_password_hash(f'password{i}')
            )
            users.append(user)
            db.session.add(user)
        db.session.commit()
        print(f"已创建 {len(users)} 个测试用户。")
        
        # 创建标签
        tag_names = ['Bug', 'Feature', 'Enhancement', 'Documentation', 'Question']
        tags = []
        for name in tag_names:
            tag = Tag(name=name)
            tags.append(tag)
            db.session.add(tag)
        db.session.commit()
        print(f"已创建 {len(tags)} 个标签。")
        
        print("数据库重建完成！")
        print("\n登录信息:")
        print("管理员: 用户名=admin, 密码=password")
        for i in range(len(users)):
            print(f"用户 {i+1}: 用户名=user{i+1}, 密码=password{i+1}")
    except Exception as e:
        print(f"创建数据库时出错: {e}")
        # 回滚事务
        db.session.rollback()
        # 尝试删除创建的数据库文件
        if os.path.exists(db_path):
            try:
                os.remove(db_path)
                print("已删除部分创建的数据库文件。")
            except:
                pass
        sys.exit(1)